\section{Detección Automática}
Para la construcción del detector automatizado de clicks primero debe
utilizarse un filtro pasa altos, el cual tendrá como propósito remover la señal
de audio y dejar únicamente las deltas que se encuentran y el ruido presente a lo largo de
toda la grabación. Para dicho filtro existen dos variantes posibles, ya sea un
filtro IIR o un filtro FIR.

\subsection{Filtro IIR - Butterworth}
Se describe a continuación como se implementa un filtro de \textit{Butterworth}.
En primer lugar se debe determinar el orden del filtro que se quiere
implementar. Para esto se dispone de la función \textit{buttord}, la cual recibe
las frecuencias de paso y de corte junto a las ganancias en dichas zonas.. Esta entonces devuelve el orden mínimo que debe tener dicho filtro para que cumpla con las especificaciones pasadas, como asi también la frecuencia natural del filtro. Con estos valores se
prosigue a llamar a la función \textit{butter}, que devuelve los coeficientes del numerador y denominador de la transferencia del filtro deseado. Para el caso de este filtro se eligieron parámetros poco restrictivos para obtener un filtro de orden pequeño. Esto se debe a que este tipo de filtro no son útiles para el presente trabajo, tal como se explicará a continuación. En la Figura
\fig{2.1} se puede visualizar la magnitud y la fase del filtro para cada una de las frecuencias.

\begin{figure}[h!]
  \centering
  \includegraphics[width = 140mm, height = 100mm]{butterResponse.png}
  \caption{Filtro IIR de Butterworth - Respuesta en frecuencia}
\end{figure}

\begin{figure}[h!]
  \centering
  \includegraphics[width = 140mm, height = 100mm]{butterPolesZeros.png}
  \caption{Filtro IIR de Butterworth - Polos y Ceros}
\end{figure}

Hasta este punto podría pensarse que es este filtro es de utilidad para el filtrado requerido para la detección automática de clicks, pero al analizar el delay que este filtro provoca se ve claramente la problemática que surge.

\begin{figure}[h!]
  \centering
  \includegraphics[width = 140mm, height = 100mm]{butterDelay.png}
  \caption{Filtro IIR de Butterworth - Group Delay}
\end{figure}

Al ver la Figura \fig{2.3} se ve que la demora que introduce el filtro no es
constante, lo cual es producto de que la variación angular del filtro no sea
lineal. Esta falta de linealidad en la fase del filtro o, lo que es lo mismo,
una demora variable imposibilita su uso. Esto se debe a que una vez que la señal en cuestión atraviesa el filtro  para detectar los lugares en los cuales existen alteraciones, se debe poder volver a la escala temporal original para poder encontrar dicha alteración en los datos originales. En otras palabras, de utilizarse este filtro se podrán detectar los clicks a la salida
del filtro, pero éstos no podrán ser ubicados correctamente en el set de datos original.

\subsection{Filtro FIR}
Ahora que se ha descartado el uso de filtros IIR para la detección de los click
se procede a demostrar que la variación angular deseada está presente en los
filtros FIR, lo cual implica una demora lineal. Para el filtro FIR a utilizar
se estableció como frecuencia de paso 3.5 KHz y frecuencia de corte 3 KHz, lo
cual genera un ancho de 500 Hz para la transición entre sección de paso y
sección filtrada. También se uso una ventana de \textit{Hanning}. Utilizado el
módulo \textit{fdatools} se determinó que serán necesarios 243 coeficientes. A partir de estos datos se calculó la función \textit{h(n)} a partir de una sinc, que es el resultado de antitransformar un filtro ideal. En la Figura \fig{2.4} se puede ver la representación de los coeficientes obtenidos.

\begin{figure}[h!]
  \centering
  \includegraphics[width = 140mm, height = 50mm]{FIR.png}
  \caption{Coeficientes del Filtro FIR}
\end{figure}

También puede observarse la respuesta en frecuencia y el diagrama de polos y
ceros que este filtro presenta. Esta información puede visualizarse en la
Figura \fig{2.5} y Figura \fig{2.6} respectivamente.

\begin{figure}[h!]
  \centering
  \includegraphics[width = 140mm, height = 100mm]{FIRResponse.png}
  \caption{Filtro FIR - Respuesta en frecuencia}
\end{figure}

\begin{figure}[h!]
  \centering
  \includegraphics[width = 140mm, height = 100mm]{FIRPolesZeros.png}
  \caption{Filtro FIR - Polos y Ceros}
\end{figure}

Por último, tal como se hizo con los filtros IIR, se presenta el diagrama que
muestra como la demora que este filtro presenta permanece constante.

\begin{figure}[h!]
  \centering
  \includegraphics[width = 140mm, height = 100mm]{FIRDelay.png}
  \caption{Filtro FIR - Polos y Ceros}
\end{figure}

\subsection{Proceso de filtrado}
Luego de determinar las propiedades del filtro FIR a utilizar y de comprobar
que el comportamiento del mismo sea apropiado para lo que se desea realizar se
procede a utilizarlo para obtener la señal de audio filtrada. Tal como fue
descripto anteriormente, el propósito del filtro es quitar la señal de audio
para que solo permanezcan los clicks y el ruido de fondo. Dicho filtrado se
realiza por medio de la convolución lineal entre la señal original y los
coeficientes del filtro. Sin embargo, por cuestiones prácticas puede ser de
interés realizar dicho filtrado en partes por medio de un proceso iterativo que
consiste en armar segmentos de un determinado largo y luego enviar éste por el
filtro. Este método es útil en casos donde no se cuenta con el total de la señal
a procesar, como es el caso de los procesos en tiempo real. Tal como se pide en
el enunciado de este trabajo, se implemento el método Overlap and Add. Este
método explota la propiedad distributiva de la convolución ya que considera al
segmento de datos como una suma de segmentos más pequeños. Para obtener la
salida que se obtendría haciendo todo el proceso en un sólo segmento
simplemente hay que sumar la salida de los segmentos convolucionados.

\subsubsection{Overlap and Add}
Este método consiste en dividir la señal original en distintos segmentos para
procesarla a medida que se va obteniendo. Debido a que la convolución genera una
salida de mayor tamaño que la entrada, para reconstruir la salida completa no
basta con concatenar la salida de los segmentos. La parte de segmento sobrante
forma parte del cálculo de la convolución del siguiente segmento, por esto si el
tamaño del sobrante es M, estos M elementos se deben sumar a los primeros M
elementos de la salida del siguiente segmento.

\paragraph{FFT}
El proceso de convolución es un proceso lento ya que para el cálculo de cada
elemento de la salida se debe realizar una sumatoria de los productos donde las
señales coinciden. Una de las propiedades de la transformada de Fourier dice
que si se tiene una convolución en tiempo, ésta se transforma en un producto en
frecuencias. El simple cálculo de un producto es mucho más rápido que en una
convolución por lo que si se logra realizar la transformada de Fourier de manera
eficiente, se mejorará el tiempo total de ejecución.\\
Aquí es donde entra la \textit{FFT}. Esta transformada aprovecha las simetrías
de la señal de entrada para calcular la transformada mucho más rápido. Estas
simetrías son máximas cuando el tamaño de la entrada es una potencia de 2. Por tal motivo
se escogieron tamaños de segmento que cumplieran con esto. Además, ya que
el método Overlap and Add es del tipo iterativo, se ve que sólo basta con
calcular la transformada del filtro una sola vez, ya que el mismo no se modifica.

\subsubsection{Resultados de velocidad}
En la siguiente tabla se observan los resultados obtenidos al calcular la señal
filtrada mediante convolución y FFT:\\

0 - Segment Size: 782\\
--Conv:	0.279688119888s\\
--FFT:	0.1286008358s\\
1 - Segment Size: 1806\\
--Conv:	0.23056602478s\\
--FFT:	0.0892431735992s\\
2 - Segment Size: 3854\\
--Conv:	0.218851089478s\\
--FFT:	0.100694894791s\\
3 - Segment Size: 7950\\
--Conv:	0.211899995804s\\
--FFT:	0.0856921672821s\\
4 - Segment Size: 16142\\
--Conv:	0.208884954453s\\
--FFT:	0.091903924942s\\
5 - Segment Size: 32526\\
--Conv:	0.207008123398s\\
--FFT:	0.0910301208496s\\
6 - Segment Size: 65294\\
--Conv:	0.206640005112s\\
--FFT:	0.112967014313s\\
7 - Segment Size: 130830\\
--Conv:	0.207714080811s\\
--FFT:	0.143734931946s\\
8 - Segment Size: 261902\\
--Conv:	0.208054065704s\\
--FFT:	121.90310812s\\
9 - Segment Size: 524046\\
--Conv:	0.204180955887s\\
--FFT:	3.03840208054s\\

Conv Total:	0.205696105957s\\

\subsection{Detección por distintos métodos}
Una vez filtrada la señal, se procede a la parte de detección de clicks, a
continuación se describen los distintos métodos utilizados.

\subsubsection{Espectro}
Este método consiste en detectar a los clicks a partir de la potencia que
aportan las deltas al espectro de la señal filtrada. Mediante la función
\textit{specgram} se obtiene la matriz de potencias, la cual contiene la
potencia para cada par tiempo-frecuencia. A partir de esta se calcula una
potencia temporal, como la suma de potencias de todas las frecuencias para un
tiempo dado. Para acentuar las diferencias que provoca una delta, se elevaron
los valores de las potencias al cuadrado. Por último, para detectar el tiempo
donde se produce un click, se compara los resultados obtenidos con un umbral, y
en caso de superarlo, se considera click.

\subsubsection{Señal}
Este método consiste en detectar a los clicks a partir de la amplitud de la
señal filtrada. La señal filtrada contiene un cambio de amplitud considerable en
los lugares donde se encuentran los clicks, por lo que se comparan las
amplitudes de la señal con un umbral, si su valor absoluto los supera, es
considerado un click.

\subsubsection{Dinámico}
Este método es igual al descripto en el punto anterior, con la diferencia que el
umbral con el que se compara es dinámico. En el caso anterior, todas las
muestras se comparan contra el mismo umbral, por lo que si este es muy elevado,
en zonas donde la señal es de poca amplitud, es posible que clicks menores pasen
sin detectar. Por el contrario, si el umbral es muy pequeño, en zonas donde la
señal tiene mayor amplitud, se tomara como clicks a muestras que no lo son.\\
El umbral dinámico se calcula en relación al promedio de la señal en un entorno,
permitiendo que este varíe de la misma forma que lo hace la señal.
